import path from 'path'
/**
 * 所有的子集路由
 */
const getChildrenRoutes = routes => {
  const result = []
  routes.forEach(route => {
    if (route.children && route.children.length) {
      result.push(...route.children)
    }
  })
  return result
}

/**
 * 处理脱离层级的路由
 */
export const filterRoutes = routes => {
  // 所有的子集路由
  const childrenRoutes = getChildrenRoutes(routes)
  // 根据自己路由进行查重操作
  return routes.filter(route => {
    // 根据route 在childrenRoutes进行查重
    return !childrenRoutes.find(childrenRoute => {
      return childrenRoute.path === route.path
    })
  })
}

/**
 *
 */

function isNull(data) {
  if (!data || JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]') return true
}

/**
 * 根据routes数据 返回对应的menu规则数据
 */

export const generateMenus = (routes, basePath = '') => {
  const result = []
  routes.forEach(item => {
    // 不存在children
    if (isNull(item.children) && isNull(item.meta)) return
    // 存在children 不存在meta 迭代 getChildrenRoutes
    if (isNull(item.meta) && !isNull(item.children)) {
      result.push(...getChildrenRoutes(item.children))
    }
    // 不存在children 存在meta 或者存在children && 存在meta
    // 不存在children 存在meta  最终menu需要跳转我们需要合并path
    const routePath = path.resolve(basePath, item.path)
    // 路由分离的时候出现同父路由
    let route = result.find(item => item.path === routePath)
    // 当前路由尚未加入到 result
    if (!route) {
      route = {
        ...item,
        path: routePath,
        children: []
      }
      // icon && title
      if (route.meta.icon && route.meta.title) {
        result.push(route)
      }
    }
    // 存在children && 存在meta
    if (!isNull(item.children)) {
      route.children.push(...generateMenus(item.children, route.path))
    }
  })
  return result
}
